// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "DFSCreator.generated.h"
/* 主要步骤
 * 
 * 初始化大地图，只有0和1的状态。其中，0和1分别代表道路和墙体，注意四周皆墙
 * 靠近边缘随机选取状态为1的道路点，作为起点 a
 * 在起点 a 的上下左右四个方向，跨两个寻找同样为1的道路点 c
 * 		如果找到，则将它们之间的墙体 b 打通，然后将 c 作为新的起点，然后继续进行第2步
 * 		如果四个方向都没有找到，则不断回退到上一点，直到找到有一点其他方向满足条件，然后继续查询
 * 当查无可查的时候，迷宫也就填充完毕了
 *
 */
UCLASS()
class MISCELLANEOUSPROJECT_API ADFSCreator : public AActor
{
	GENERATED_BODY()

public:
	ADFSCreator();
	void CreateMaze();
	void DFSFindPath(int32 x, int32 y);
	// 此时 roadArr 中，0代表墙，1代表道路点，2代表已经确认过的道路点
	bool checkPointValid(int32 x, int32 y);
	void ChangeMesh();
protected:
	virtual void BeginPlay() override;

public:

	UPROPERTY(EditAnywhere)
	int32 width = 10;

	UPROPERTY(EditAnywhere)
	int32 height = 10;

	UPROPERTY(EditAnywhere)
	UStaticMesh* PlaneMesh;

	UPROPERTY(EditAnywhere)
	UStaticMesh* BlockMesh;

	UPROPERTY(EditAnywhere)
	float playRate = 1;

	TArray<TArray<int32>> roadArr;
	TArray<UStaticMeshComponent*> roadrMeshs;
	FTimerHandle timerHandle;
	TQueue<TTuple<int32, int32>> taskQueue;
};
